﻿using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;

namespace BZV.Foundation
{
    // 彩票的数据
    public class Lottery
    {
        // 成员变量
        private string m_strID;                             // 彩票的类型
        private string m_strIssue;                          // 彩票的期号
        private string m_strCode;                           // 开奖号码
        private BasicParam m_Param;                         // 基本参数

#region 属性

        // ID 属性
        public string ID
        {
            get { return m_strID; }
        }

        // 期号属性
        public string Issue
        {
            get { return m_strIssue; }
        }

        // 开奖号码
        public string Code
        {
            get { return m_strCode; }
        }

        // 参数
        public BasicParam Param
        {
            get { return m_Param; }
        }
#endregion

        /// <summary>
        /// 创建一期彩票
        /// </summary>
        /// <param name="strID"></param>
        /// <param name="strIssue"></param>
        /// <param name="strCode"></param>
        public void Create(string strID, string strIssue, string strCode)
        {
            // 基础数据设置
            m_strID = strID;
            m_strIssue = strIssue;
            m_strCode = strCode;

            // 计算基本的参数
            m_Param = new BasicParam(strCode);
        }
    }

    public class BasicParam
    {
#region 成员变量
        public CombinationState comState;
        public List<AttributeState> attrStates = new List<AttributeState>();
        public List<SizeState> sizeStates = new List<SizeState>();

        /// <summary>
        /// 得到基本的参数
        /// </summary>
        /// <param name="lottery"></param>
        public BasicParam(string strCode)
        {
            // 计算后三位组态
            comState = GetComState(strCode.Substring(2, 3));

            // 获取所有的单双
            for (int i = 0; i < strCode.Length ; i++)
            {
                // 得到单个的数值
                string strOne = strCode[i].ToString();

                // 单双
                if (Convert.ToInt32(strOne) % 2 != 0)     // 单
                {
                    attrStates.Add(AttributeState.EN_ATTR_SINGLE);
                }
                else
                {
                    attrStates.Add(AttributeState.EN_ATTR_DOUBLE);
                }

                // 大小
                if (Convert.ToInt32(strOne) > 4)            // 大
                {
                    sizeStates.Add(SizeState.EN_SIZE_BIG);
                }
                else
                {
                    sizeStates.Add(SizeState.EN_SIZE_SMALL);
                }
            }
        }

        /// <summary>
        /// 获取组态
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static CombinationState GetComState(String str)
        {
            // 不合法
            if (str.Length < 3)
            {
                return CombinationState.EN_COM_ALL;
            }

            // 豹子
            if (str[0] == str[1] && str[1] == str[2])
            {
                return CombinationState.EN_COM_ALL;
            }

            // 组六
            if (str[0] != str[1] && str[0] != str[2] && str[1] != str[2])
            {
                return CombinationState.EN_COM_SIX;
            }

            return CombinationState.EN_COM_THREE;
        }
#endregion
    }

    /// <summary>
    /// 组态定义
    /// </summary>
    public enum CombinationState
    {
        EN_COM_THREE,
        EN_COM_SIX,
        EN_COM_ALL
    }

    /// <summary>
    /// 特性定义，单双
    /// </summary>
    public enum AttributeState
    {
        EN_ATTR_SINGLE,
        EN_ATTR_DOUBLE
    }

    /// <summary>
    /// 大小属性
    /// </summary>
    public enum SizeState
    {
        EN_SIZE_BIG,
        EN_SIZE_SMALL
    }
}
